@@ -5,7 +5,7 @@ from django_logit import logit |
||
5 | 5 |
from django_response import response |
6 | 6 |
from paginator import pagination |
7 | 7 |
|
8 |
-from member.models import MemberActivityInfo |
|
8 |
+from member.models import MemberActivityInfo, MemberActivitySignupInfo, MemberActivityContributionInfo |
|
9 | 9 |
from utils.error.errno_utils import MemberActivityStatusCode |
10 | 10 |
|
11 | 11 |
|
@@ -50,3 +50,188 @@ def activity_detail(request): |
||
50 | 50 |
return response(data={ |
51 | 51 |
'activity': act.details(user_id), |
52 | 52 |
}) |
53 |
+ |
|
54 |
+ |
|
55 |
+@logit |
|
56 |
+def activity_signup(request): |
|
57 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID |
|
58 |
+ user_id = request.POST.get('user_id', '') |
|
59 |
+ activity_id = request.POST.get('activity_id', '') |
|
60 |
+ fields = request.POST.get('fields', fields) |
|
61 |
+ |
|
62 |
+ try: |
|
63 |
+ act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True) |
|
64 |
+ except MemberActivityInfo.DoesNotExist: |
|
65 |
+ return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) |
|
66 |
+ |
|
67 |
+ MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={ |
|
68 |
+ 'title': act.title, |
|
69 |
+ 'fields': fields, |
|
70 |
+ }) |
|
71 |
+ |
|
72 |
+ # TODO: 立即推送模版消息(报名成功,时间,地点) |
|
73 |
+ # TODO: 延迟(活动当天)推送模版消息(时间,地点) |
|
74 |
+ |
|
75 |
+ return response(data={ |
|
76 |
+ 'activity': act.data(user_id), |
|
77 |
+ }) |
|
78 |
+ |
|
79 |
+ |
|
80 |
+@logit |
|
81 |
+def activity_signup_detail(request): |
|
82 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID |
|
83 |
+ user_id = request.POST.get('user_id', '') |
|
84 |
+ activity_id = request.POST.get('activity_id', '') |
|
85 |
+ |
|
86 |
+ try: |
|
87 |
+ signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True) |
|
88 |
+ except MemberActivitySignupInfo.DoesNotExist: |
|
89 |
+ return response() |
|
90 |
+ |
|
91 |
+ return response(data={ |
|
92 |
+ 'signup_info': signup_info.data, |
|
93 |
+ }) |
|
94 |
+ |
|
95 |
+ |
|
96 |
+@logit |
|
97 |
+def activity_contribute_create(request): |
|
98 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID |
|
99 |
+ user_id = request.POST.get('user_id', '') |
|
100 |
+ activity_id = request.POST.get('activity_id', '') |
|
101 |
+ main_activity_id = request.POST.get('main_activity_id', '') |
|
102 |
+ content_type = get_query_value(request, 'content_type', val_cast_type='int') |
|
103 |
+ title = request.POST.get('title', '') |
|
104 |
+ content = request.POST.get('content', '') |
|
105 |
+ images = get_query_value(request, 'images', val_cast_type='listjson') |
|
106 |
+ video_url = request.POST.get('video_url', '') |
|
107 |
+ |
|
108 |
+ # 报名字段 |
|
109 |
+ user_name = request.POST.get('user_name', '') |
|
110 |
+ user_avatar = request.POST.get('user_avatar', '') |
|
111 |
+ |
|
112 |
+ # 校验用户是否存在 |
|
113 |
+ try: |
|
114 |
+ UserInfo.objects.get(user_id=user_id) |
|
115 |
+ except UserInfo.DoesNotExist: |
|
116 |
+ return response(UserStatusCode.USER_NOT_FOUND) |
|
117 |
+ |
|
118 |
+ MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={ |
|
119 |
+ 'title': act.title, |
|
120 |
+ 'name': user_name, |
|
121 |
+ 'avatar': user_avatar, |
|
122 |
+ }) |
|
123 |
+ |
|
124 |
+ contribution = MemberActivityContributionInfo.objects.create( |
|
125 |
+ brand_id=brand_id, |
|
126 |
+ user_id=user_id, |
|
127 |
+ activity_id=activity_id, |
|
128 |
+ main_activity_id=main_activity_id, |
|
129 |
+ content_type=content_type, |
|
130 |
+ title=title, |
|
131 |
+ content=content, |
|
132 |
+ images=images, |
|
133 |
+ video_url=video_url, |
|
134 |
+ user_name=user_name, |
|
135 |
+ user_avatar=user_avatar, |
|
136 |
+ ) |
|
137 |
+ |
|
138 |
+ return response(data={ |
|
139 |
+ 'contribution': contribution.data, |
|
140 |
+ }) |
|
141 |
+ |
|
142 |
+ |
|
143 |
+@logit |
|
144 |
+def activity_contribute_update(request): |
|
145 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID |
|
146 |
+ user_id = request.POST.get('user_id', '') |
|
147 |
+ activity_id = request.POST.get('activity_id', '') |
|
148 |
+ main_activity_id = request.POST.get('main_activity_id', '') |
|
149 |
+ content_type = get_query_value(request, 'content_type', val_cast_type='int') |
|
150 |
+ contribution_id = request.POST.get('contribution_id', '') |
|
151 |
+ title = request.POST.get('title', '') |
|
152 |
+ content = request.POST.get('content', '') |
|
153 |
+ images = get_query_value(request, 'images', val_cast_type='listjson') |
|
154 |
+ video_url = request.POST.get('video_url', '') |
|
155 |
+ |
|
156 |
+ # 校验用户是否存在 |
|
157 |
+ try: |
|
158 |
+ UserInfo.objects.get(user_id=user_id) |
|
159 |
+ except UserInfo.DoesNotExist: |
|
160 |
+ return response(UserStatusCode.USER_NOT_FOUND) |
|
161 |
+ |
|
162 |
+ try: |
|
163 |
+ signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, main_activity_id=main_activity_id, status=True) |
|
164 |
+ except MemberActivitySignupInfo.DoesNotExist: |
|
165 |
+ signup_info = None |
|
166 |
+ |
|
167 |
+ contribution, _ = MemberActivityContributionInfo.objects.update_or_create(brand_id=brand_id, user_id=user_id, activity_id=activity_id, contribution_id=contribution_id, defaults={ |
|
168 |
+ 'title': title, |
|
169 |
+ 'content': content, |
|
170 |
+ 'images': images, |
|
171 |
+ 'video_url': video_url, |
|
172 |
+ 'user_name': signup_info.name if signup_info else '', |
|
173 |
+ 'user_avatar': signup_info.final_avatar if signup_info else '', |
|
174 |
+ 'audit_status': 0, |
|
175 |
+ }) |
|
176 |
+ |
|
177 |
+ return response(data={ |
|
178 |
+ 'contribution': contribution.data, |
|
179 |
+ }) |
|
180 |
+ |
|
181 |
+ |
|
182 |
+@logit |
|
183 |
+def activity_contribute_list(request): |
|
184 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID |
|
185 |
+ user_id = request.POST.get('user_id', '') |
|
186 |
+ main_activity_id = request.POST.get('main_activity_id', '') |
|
187 |
+ activity_id = request.POST.get('activity_id', '') |
|
188 |
+ content_type = get_query_value(request, 'content_type', val_cast_type='int') |
|
189 |
+ is_myself = get_query_value(request, 'is_myself', val_cast_type='int') |
|
190 |
+ audit_status = get_query_value(request, 'audit_status', val_cast_type='int') |
|
191 |
+ is_audit_pass = get_query_value(request, 'is_audit_pass', val_cast_type='int') |
|
192 |
+ is_selected = get_query_value(request, 'is_selected', val_cast_type='int') |
|
193 |
+ page = request.POST.get('page', 1) |
|
194 |
+ num = request.POST.get('num', 20) |
|
195 |
+ |
|
196 |
+ if main_activity_id: |
|
197 |
+ contributions = MemberActivityContributionInfo.objects.filter(main_activity_id=main_activity_id, status=True) |
|
198 |
+ else: |
|
199 |
+ contributions = MemberActivityContributionInfo.objects.filter(activity_id=activity_id, status=True) |
|
200 |
+ |
|
201 |
+ if 'content_type' in request.POST: |
|
202 |
+ contributions = contributions.filter(content_type=content_type) |
|
203 |
+ if 'is_myself' in request.POST: |
|
204 |
+ if is_myself: |
|
205 |
+ contributions = contributions.filter(user_id=user_id) |
|
206 |
+ else: |
|
207 |
+ contributions = contributions.exclude(user_id=user_id) |
|
208 |
+ if 'audit_status' in request.POST: |
|
209 |
+ contributions = contributions.filter(audit_status=audit_status) |
|
210 |
+ if 'is_audit_pass' in request.POST: |
|
211 |
+ if is_audit_pass: |
|
212 |
+ contributions = contributions.filter(audit_status=MemberActivityContributionInfo.AUDIT_PASS) |
|
213 |
+ else: |
|
214 |
+ contributions = contributions.exclude(audit_status=MemberActivityContributionInfo.AUDIT_PASS) |
|
215 |
+ if 'is_selected' in request.POST: |
|
216 |
+ contributions = contributions.filter(is_selected=is_selected) |
|
217 |
+ contributions = contributions.order_by('-pk') |
|
218 |
+ contributions, left = pagination(contributions, page, num) |
|
219 |
+ contributions = [contribution.data for contribution in contributions] |
|
220 |
+ |
|
221 |
+ return response(data={ |
|
222 |
+ 'contributions': contributions, |
|
223 |
+ 'left': left, |
|
224 |
+ }) |
|
225 |
+ |
|
226 |
+ |
|
227 |
+@logit |
|
228 |
+def activity_contribute_detail(request): |
|
229 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID |
|
230 |
+ contribution_id = request.POST.get('contribution_id', '') |
|
231 |
+ |
|
232 |
+ try: |
|
233 |
+ contribution = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id, status=True) |
|
234 |
+ except MemberActivityContributionInfo.DoesNotExist: |
|
235 |
+ return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND) |
|
236 |
+ |
|
237 |
+ return response(data=contribution.data) |
@@ -0,0 +1,21 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+# Generated by Django 3.2.6 on 2023-05-15 08:07 |
|
4 |
+ |
|
5 |
+from django.db import migrations |
|
6 |
+import jsonfield.fields |
|
7 |
+ |
|
8 |
+ |
|
9 |
+class Migration(migrations.Migration): |
|
10 |
+ |
|
11 |
+ dependencies = [ |
|
12 |
+ ('member', '0061_alter_memberactivityinfo_feed_id'), |
|
13 |
+ ] |
|
14 |
+ |
|
15 |
+ operations = [ |
|
16 |
+ migrations.AddField( |
|
17 |
+ model_name='memberactivitysignupinfo', |
|
18 |
+ name='fields', |
|
19 |
+ field=jsonfield.fields.JSONField(blank=True, default='[]', help_text='自定义报名字段', null=True, verbose_name='fields'), |
|
20 |
+ ), |
|
21 |
+ ] |
@@ -718,6 +718,8 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin): |
||
718 | 718 |
name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名') |
719 | 719 |
phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'电话') |
720 | 720 |
|
721 |
+ fields = JSONField(_(u'fields'), blank=True, null=True, default='[]', help_text=u'自定义报名字段') |
|
722 |
+ |
|
721 | 723 |
class Meta: |
722 | 724 |
verbose_name = _(u'会员活动报名信息') |
723 | 725 |
verbose_name_plural = _(u'会员活动报名信息') |
@@ -741,6 +743,7 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin): |
||
741 | 743 |
'avatar': self.final_avatar, |
742 | 744 |
'name': self.name, |
743 | 745 |
'phone': self.phone, |
746 |
+ 'fields': json.loads(self.fields) if self.fields else [], |
|
744 | 747 |
} |
745 | 748 |
|
746 | 749 |
@property |
@@ -753,6 +756,7 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin): |
||
753 | 756 |
'avatar': self.final_avatar, |
754 | 757 |
'name': self.name, |
755 | 758 |
'phone': self.phone, |
759 |
+ 'fields': json.loads(self.fields) if self.fields else [], |
|
756 | 760 |
} |
757 | 761 |
|
758 | 762 |
|
@@ -10,3 +10,17 @@ urlpatterns = [ |
||
10 | 10 |
url(r'^member/activity/list$', activity_mp_views.activity_list, name='mp_member_activity_list'), # 获取会员分区活动列表 |
11 | 11 |
url(r'^member/activity/detail$', activity_mp_views.activity_detail, name='mp_member_activity_detail'), # 获取会员分区活动详情 |
12 | 12 |
] |
13 |
+ |
|
14 |
+# activity signup |
|
15 |
+urlpatterns += [ |
|
16 |
+ url(r'^member/activity/signup$', activity_mp_views.activity_signup, name='mp_member_activity_signup'), # 会员活动报名 |
|
17 |
+ url(r'^member/activity/signup/detail$', activity_mp_views.activity_signup_detail, name='mp_member_activity_signup_detail'), # 获取会员活动报名信息 |
|
18 |
+] |
|
19 |
+ |
|
20 |
+# activity contribution |
|
21 |
+urlpatterns += [ |
|
22 |
+ url(r'^member/activity/contribute/create$', activity_mp_views.activity_contribute_create, name='mp_member_activity_contribute_create'), |
|
23 |
+ url(r'^member/activity/contribute/list$', activity_mp_views.activity_contribute_list, name='member_activity_contribute_list'), |
|
24 |
+ url(r'^member/activity/contribute/update$', activity_mp_views.activity_contribute_update, name='member_aactivity_contribute_update'), |
|
25 |
+ url(r'^member/activity/contribute/detail$', activity_mp_views.activity_contribute_detail, name='member_activity_contribute_detail'), |
|
26 |
+] |